iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用系列 第 17

Day 17:還記得 10 天前安裝的 runner嗎?

  • 分享至 

  • xImage
  •  

我們在 Day 7 設定了 self-hosted runner,後來一直沒去用他,今天來把他用起來。

回顧 Self-Hosted Runner 的特性

在繼續之前,讓我們再次回顧 self-hosted runner 的一些關鍵特點:

  1. 自有環境:這些 Runner 運行在您自己的機器上,無論是實體還是虛擬。
  2. 更多控制:更大的自由度來控制硬體、操作系統或安裝的軟體。
  3. 網路存取:存取地端的資源、或是在地端部署應用程式,這在 GitHub-Hosted Runner 雖然是可能的,但須要做額外的設定,如 site-to-site VPN (搭配 Azure VNET),並且會需要使用 larger runner。會有這種需求的人基本上得去訂閱 GitHub Enterprise Cloud,但我覺得改用地端的 CI/CD 方案可能還比較快,或是乾脆架設 Jenkins 或 GitLab 吧...
  4. 成本:需要自己承擔硬體和維護成本。

我主要是因為 "3. 網路存取" 而架設地端的 runner,因為我會部署服務在我自家內網的機器上。

檢查 Runner 的狀態

首先,我們需要確認 runner 的狀態。請前往 GitHub Settings > Actions > Runners 頁面。

令人驚訝的是,我們發現 runner 下線了。
https://ithelp.ithome.com.tw/upload/images/20230920/20162813frk7ver3DA.png

這時突然想到,之前是使用 ./run.sh 來讓服務啟動,重開機 (甚至是登出 SSH 後) 以後這個服務就被關掉了。

原來是沒有讓它常駐在系統啊,那我們先來安裝成 service

我做了以下的步驟,console 輸出也在裡面:
PS. 請注意我的 runner 是以 root 權限執行的,所以我才會設定一個環境變數叫做 RUNNER_ALLOW_RUNASROOT,如果沒有要用 root 跑 runner 就不需要此設定此變數。

root@pi-host:~/actions-runner# RUNNER_ALLOW_RUNASROOT="1" ./svc.sh install root
Creating launch runner in /etc/systemd/system/actions.runner.**masked**-too-simple-rss-reader.pi4.service
Run as user: root
Run as uid: 0
gid: 0
Created symlink /etc/systemd/system/multi-user.target.wants/actions.runner.**masked**-too-simple-rss-reader.pi4.service → /etc/systemd/system/actions.runner.**masked**-too-simple-rss-reader.pi4.service.
root@pi-host:~/actions-runner# systemctl enable actions.runner.**masked**-too-simple-rss-reader.pi4.service
root@pi-host:~/actions-runner# systemctl start actions.runner.**masked**-too-simple-rss-reader.pi4.service
root@pi-host:~/actions-runner# systemctl status actions.runner.**masked**-too-simple-rss-reader.pi4.service
● actions.runner.**masked**-too-simple-rss-reader.pi4.service - GitHub Actions Runner (**masked**-too-simple-rss-reader.pi4)
     Loaded: loaded (/etc/systemd/system/actions.runner.**masked**-too-simple-rss-reader.pi4.service; enabled; preset: enabled)
     Active: active (running) since Sun 2023-09-17 22:12:01 CST; 3s ago
   Main PID: 7380 (runsvc.sh)
      Tasks: 24 (limit: 4414)
     Memory: 35.1M
        CPU: 3.047s
     CGroup: /system.slice/actions.runner.**masked**-too-simple-rss-reader.pi4.service
             ├─7380 /bin/bash /root/actions-runner/runsvc.sh
             ├─7382 ./externals/node16/bin/node ./bin/RunnerService.js
             └─7389 /root/actions-runner/bin/Runner.Listener run --startuptype service

Sep 17 22:12:01 pi-host systemd[1]: Started actions.runner.**masked**-too-simple-rss-reader.pi4.service - GitHub Actions Runner (**masked**-too-simple-rss-reader.p>
Sep 17 22:12:01 pi-host runsvc.sh[7380]: .path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Sep 17 22:12:01 pi-host runsvc.sh[7382]: Starting Runner listener with startup type: service
Sep 17 22:12:01 pi-host runsvc.sh[7382]: Started listener process, pid: 7389
Sep 17 22:12:01 pi-host runsvc.sh[7382]: Started running service

有了

https://ithelp.ithome.com.tw/upload/images/20230920/20162813YzIKYrRRTe.png

修改 workflow 定義檔以使用 self-hosted runner

既然我們已經成功地重新啟動了自己的 runner,那麼接下來就是告訴 GitHub Actions 我們要用它。這需要我們修改存儲庫中的 .github/workflows/main.yml 或者其他你用於定義 workflow 的 yaml 文件。

原來的YAML可能類似於以下內容:

name: CI
on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    # ... 其他

要改為使用我們自己的 runner,我們需要更改 runs-on 字段。我們的 self-hosted runner 有self-hosted,linux 兩個 tag,所以我們應該這樣設定:

name: CI
on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: [self-hosted, linux]
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    # ... 其他

這樣一來,每次這個 workflow 觸發時,它就會在我們配置有 self-hosted,linux 標籤的 runner 上執行。
實際上。去看 job log 也確實有了

https://ithelp.ithome.com.tw/upload/images/20230920/20162813PXeClBbNeQ.png

總結

今天,我們不僅確保了我們的 self-hosted runner 能在重啟後自動執行,也學會了如何在 GitHub Actions 中配置它。這讓我們的整個開發流程更加高效和靈活。


上一篇
Day 16:深入了解 GitHub Actions Workflow 紀錄
下一篇
Day 18:番外篇 - 要從 GitLab CI/CD 遷移到 GitHub Actions,頭好痛...
系列文
30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言